package com.atguigu.juc.chap05;

import java.util.Random;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;

/**
 * @author Taeyang
 * @date 2025/4/1
 */
public class CountDownLatchDemo {

    /**
     * main方法也是一个进程，在这里是主进程，即上锁的同学
     *
     * @param args 参数
     */
    public static void main(String[] args) throws InterruptedException {
        // 实例化一个倒计数器，count指定初始计数
        CountDownLatch countDownLatch = new CountDownLatch(6);

        for (int i = 0; i < 6; i++) {
            new Thread(() -> {
                try {
                    // 每个同学墨迹几秒钟
                    TimeUnit.SECONDS.sleep(new Random().nextInt(5));
                    System.out.println(Thread.currentThread().getName() + "：离开教室");
                    // 调用countDown()计算减1
                    countDownLatch.countDown();
                } catch (InterruptedException e) {
                    throw new RuntimeException(e);
                }
            }).start();
        }

        // 等待，当计数减到0时，阻塞线程（可以是一个，也可以是多个）并行执行
        countDownLatch.await();
        System.out.println("文文老师锁门");
    }
}
